﻿using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;


namespace ProjectNocturnalFool
{

    internal class Constants
    {
        #region UserControl Constants
        public const string TextureBlank = "Misc/Blank";
        public const string TextureWhite = "Misc/White";


        #region Button
        public const string TextureButtonRegular = "Misc/White";

        public const int ButtonWidthShort = 50;
        public const int ButtonWidth = 75;
        public const int ButtonWidthWide = 125;
        public const int ButtonHeight = 20;

        public const int PortraitButtonHeight = 12;
                
        #endregion

        #region Label
        //Title Screen Loads
        public const string TextureLabelTitle = "Menus/Labels/Title";
        public const string TextureBackgroundTitle = "Misc/White";
        public const string TextureParticleLeaf = "Menus/Title/Leaf";

        public const int BannerHeight = 10;
        public const string TextureBanner = "Menus/Buttons/Button";

        #endregion

        #region Textbox
        public const string TextureTextboxRegular = "Misc/White";

        public const int BlinkerOffset = 2;
        public const float BlinkerScale = FontScale + 0.1f;

        #endregion

        #region ItemsControl
        public const string TextureItemsRegular = "Misc/White";

        public const int ItemsHeightOffset = -6;

        #endregion

        #region TextMessenger
        public const int TextMessengerHeight = 50;
        public const int TextMessengerWidth = 125;

        #endregion

        #region Modar Window

        public const int ModarHeight = 150;
        public const int ModarWidth = 150;

        #endregion

        #region PartySelect

        public const int PortraitHeight = 25;
        public const int PortraitWidth = 25;

        public const int PartyMemberHeight = 65;
        public const int PartyMemberWidth = 35;

        public const string TexturePortraitDust = "Entities/Portraits/Dust";
        public const string TexturePortraitPharo = "Entities/Portraits/Pharo";

        #endregion

        #endregion

        #region Mouse Mgr

        public const string TextureParticleCircle = "Particles/Mouse/Circle";
        public const string TextureParticleStar = "Particles/Mouse/Star";
        public const string TextureParticleDiamond = "Particles/Mouse/Diamond";
        public const string TextureMouseCursorSword = "Particles/Mouse/Icon"; 

        #endregion

        #region General Variables
        /// <summary>
        /// The offset to place controls that border the screen
        /// </summary>
        public const int ScreenBorder = 5;
        /// <summary>
        /// How much to scale the font in general
        /// </summary>
        public const float FontScale = 1f;
        /// <summary>
        /// Debug messaging font
        /// </summary>
        public const float DebugFontScale = 1.0f;

        /// <summary>
        /// Opacity velocity factor (low pass), 
        /// </summary>
        public const float OpacityVelocity = 0.05f;

        /// <summary>
        /// Font to use
        /// </summary>
        public const string Font = "Fonts/BitFont";

        public const int INDEX_INVALID = -1;

        public const int ControlOffsets = 5;

        public const int ControlSmallOffsets = 2;

        public const int TextOffset = 8;

        public const int ControlNoState = -1;
        #endregion

        #region GameBoard
        public const float heightRowDepthMod = 0.00001f;
        public const float selectorDepthMod = 0.000001f;
        
        public const int tileImageW = 64;
        public const int tileImageH = 64;

        //HACK
        public const int entityAP = 8;

        public const int flatTerrainCost = 2;
        public const int mediumTerrainCost = 3;
        public const int roughTerrainCost = 4;
        public const int impassableTerrainCost = 999;

        #endregion

        #region EntitySprite
        public const int medSpriteWidth = 48;
        public const int medSpriteHeight = 48;
        public const int medSpriteCentreX = medSpriteWidth/2;
        public const int medSpriteCentreY = medSpriteHeight / 2;

        public const int walkLeftRowIndex = 7;
        public const int walkLeftFrameNumber = 8;


        //TODO make more meaningful parts of sprites
        public const int esComponentHeight = medSpriteHeight / 3;
        public const int esTopIndex = 0;
        public const int esMidIndex = 1;
        public const int esBotIndex = 2;
        public const int esTopOffset = 0;
        public const int esMidOffset = 16;
        public const int esBotOffset = 32;

        #endregion

        #region Camera
        #region camScale
        public const float camDefaultScaleIndex = 4;
        public const float camScaleIncrement = 0.25f;
        public const float camMinScale = 0.50f;
        public const float camMaxScale = 3.0f;
        #endregion

        #region camShake
        #endregion

        #endregion

         #region Screen Resolutions
        public const int WindowWidth = 1280;
        public const int WindowHeight = 720;
        public const bool FullScreen = false;

        public const int VirtualWidth = 320;
        public const int VirtualHeight = 180;
        #endregion

        #region Session

        public const int CampaignMaxNumCharacters = 4;

        #endregion


        public const bool debugNetwork = false;
        public const ScreenLoad gameState = ScreenLoad.Arena;

       
    }
}